providers.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. "use client";
  2. import { NuqsAdapter } from "nuqs/adapters/next/app";
  3. import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
  4. import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
  5. import { I18nProviderClient } from "locales/client";
  6. import { AnalyticsProvider } from "@/shared/lib/analytics/client";
  7. import { DialogRenderer } from "@/features/dialogs-provider/DialogProvider";
  8. import { useAutoLocale } from "@/entities/user/model/use-auto-locale";
  9. import { ToastSonner } from "@/components/ui/ToastSonner";
  10. import { Toaster } from "@/components/ui/toaster";
  11. import { ThemeProvider } from "@/components/ui/theme-provider";
  12. import type { PropsWithChildren } from "react";
  13. const queryClient = new QueryClient();
  14. function LocaleDetector() {
  15. useAutoLocale();
  16. return null;
  17. }
  18. export const Providers = ({ children, locale }: PropsWithChildren<{ locale: string }>) => {
  19. return (
  20. <>
  21. <AnalyticsProvider />
  22. <NuqsAdapter>
  23. <QueryClientProvider client={queryClient}>
  24. <I18nProviderClient locale={locale}>
  25. <ThemeProvider attribute="class" defaultTheme="system" disableTransitionOnChange enableSystem>
  26. <LocaleDetector />
  27. <Toaster />
  28. <ToastSonner />
  29. <DialogRenderer />
  30. <ReactQueryDevtools initialIsOpen={false} />
  31. {children}
  32. </ThemeProvider>
  33. </I18nProviderClient>
  34. </QueryClientProvider>
  35. </NuqsAdapter>
  36. </>
  37. );
  38. };